import { ref, computed, watch } from 'vue';
import { getToken } from '/@/utils/auth';
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
import { useJVxeComponent } from '../useJVxeComponent';
/**
 * use 公共上传组件
 * @param props
 * @param options 组件选项，token：默认是否传递token，action：默认上传路径，multiple：是否允许多文件
 */
export function useJVxeUploadCell(props, options) {
    const setup = useJVxeComponent(props);
    const { innerValue, originColumn, handleChangeCommon } = setup;
    const innerFile = ref(null);
    /** upload headers */
    const uploadHeaders = computed(() => {
        let headers = {};
        if ((originColumn.value.token ?? options?.token ?? false) === true) {
            headers['X-Access-Token'] = getToken();
        }
        return headers;
    });
    /** 上传请求地址 */
    const uploadAction = computed(() => {
        if (!originColumn.value.action) {
            return options?.action ?? '';
        }
        else {
            return originColumn.value.action;
        }
    });
    const hasFile = computed(() => innerFile.value != null);
    const responseName = computed(() => originColumn.value.responseName ?? 'message');
    watch(innerValue, (val) => {
        if (val) {
            innerFile.value = val;
        }
        else {
            innerFile.value = null;
        }
    }, { immediate: true });
    function handleChangeUpload(info) {
        let { file } = info;
        let value = {
            name: file.name,
            type: file.type,
            size: file.size,
            status: file.status,
            percent: file.percent,
            path: innerFile.value?.path ?? '',
        };
        if (file.response) {
            value['responseName'] = file.response[responseName.value];
        }
        let paths = [];
        if (options?.multiple && innerFile.value && innerFile.value.path) {
            paths = innerFile.value.path.split(',');
        }
        if (file.status === 'done') {
            if (typeof file.response.success === 'boolean') {
                if (file.response.success) {
                    paths.push(file.response[responseName.value]);
                    value['path'] = paths.join(',');
                    handleChangeCommon(value);
                }
                else {
                    value['status'] = 'error';
                    value['message'] = file.response.message || '未知错误';
                }
            }
            else {
                // 考虑到如果设置action上传路径为非jeecg-boot后台，可能不会返回 success 属性的情况，就默认为成功
                paths.push(file.response[responseName.value]);
                value['path'] = paths.join(',');
                handleChangeCommon(value);
            }
        }
        else if (file.status === 'error') {
            value['message'] = file.response.message || '未知错误';
        }
        innerFile.value = value;
    }
    function handleClickDownloadFile() {
        let { url, path } = innerFile.value || {};
        if (!url || url.length === 0) {
            if (path && path.length > 0) {
                url = getFileAccessHttpUrl(path.split(',')[0]);
            }
        }
        if (url) {
            window.open(url);
        }
    }
    function handleClickDeleteFile() {
        handleChangeCommon(null);
    }
    return {
        ...setup,
        innerFile,
        uploadAction,
        uploadHeaders,
        hasFile,
        responseName,
        handleChangeUpload,
        handleClickDownloadFile,
        handleClickDeleteFile,
    };
}
export function fileGetValue(value) {
    if (value && value.path) {
        return value.path;
    }
    return value;
}
export function fileSetValue(value) {
    if (value) {
        let first = value.split(',')[0];
        let name = first.substring(first.lastIndexOf('/') + 1);
        return {
            name: name,
            path: value,
            status: 'done',
        };
    }
    return value;
}
